WebSocket

使用net库的 WebSocket

服务端

server.go

package main


import
(
"fmt"
"log"
"github.com/labstack/echo"
"github.com/labstack/echo/middleware"
"golang.org/x
et/websocket"
)

func hello(c echo.Context) error{
    websocket.Handler( func(ws *websocket.Conn){
        defer ws.Close()
        for{
            // Write
            err := websocket.Message.Send(ws,"Hello, Client!")
            if err != nil{
                log.Fatal(err)
            }
            // Read

            msg :=""
            err = websocket.Message.Receive(ws,&msg)
            if err != nil{
                log.Fatal(err)
            }
            fmt.Printf("%s\n", msg)
        }
    }).ServeHTTP(c.Response(), c.Request())
    return nil
}

func main(){
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Static("/","../public")
    e.GET("/ws", hello)
    e.Logger.Fatal(e.Start(":1323"))
}

使用gorilla的 WebSocket

服务端

server.go

package main


import
(
"fmt"
"log"
"github.com/labstack/echo"
"github.com/gorilla/websocket"
"github.com/labstack/echo/middleware"
)

var
(
    upgrader = websocket.Upgrader{}
)

func hell(c echo.Context) error{
    ws, err := upgrader.Upgrade(c.Response(), c.Request(),nil)
    if err !=nil{
         return err    
    }
    defer ws.Close()
    for{
    // Write

        err := ws.WriteMessage(websocket.TextMessage,[]byte("Hello, Client!"))
        if err != nil{
                 log.Fatal(err)
        }
        // Read
        _, msg, err := ws.ReadMessage()
        if err !=nil{
            log.Fatal(err)
        }
        fmt.Printf("%s\n", msg)
    }
}

func main(){
    e := echo.New()
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Static("/", "../public")
    e.GET("/ws", hello)
    e.Logger.Fatal(e.Start(":1323"))
}

客户端

index.html

<!doctypehtml>
<html lang ="en">
<head>
  <meta charset ="utf-8">
  <title>WebSocket</title>
</head>
<body>
<p id ="output"></p>
<script>
    var loc = window.location;
    var uri ='ws:';
    if(loc.protocol ==='https:')
    {
      uri ='wss:';
    }
    uri +='//'+ loc.host;
    uri += loc.pathname +'ws';
    ws =new WebSocket(uri)
    ws.onopen = function()
    {
      console.log('Connected')
    }
    ws.onmessage = function(evt){
      var out = document.getElementById('output');
      out.innerHTML += evt.data +'<br>';
    }
    setInterval(function(){
      ws.send('Hello, Server!');
    }, 1000
    );
</script>
</body>
</html>

输出示例

Client

Hello, Client
!

Hello, Client
!

Hello, Client
!

Hello, Client
!

Hello, Client
!

Server

Hello, Server
!

Hello, Server
!

Hello, Server
!

Hello, Server
!

Hello, Server
!

results matching ""

    No results matching ""